package com.hhq.demo.dao;

import com.hhq.demo.bean.Express;
import com.hhq.demo.bean.RankingBean;
import com.hhq.demo.exception.DuplicateCodeException;

import java.util.List;
import java.util.Map;

/**
 * @author HHQ
 * @date 2021年12月12日
 */
public interface ExpressDao {

    /**
     * 获取控制台数据
     * @return 快递总数，新增快递数，待取件数，新增代取件数
     */
    Map<String,Object> consoleData();

    /**
     * 查询所有快递信息
     * @return 快递集合
     */
    List<Express> listAll();

    /**
     * 分页查询快递信息
     * @param offset 起始索引
     * @param pageNumber 每页显示数量
     * @return 快递集合
     */
    List<Express> listLimit(Integer offset,Integer pageNumber);

    /**
     * 根据快递单号删除
     * @param number 单号
     * @return 受影响的行数
     */
    int deleteByNumber(String number);

    /**
     * 新增快递
     * @param express 快递
     * @return 受影响的行数
     */
    int insert(Express express) throws DuplicateCodeException;

    /**
     * 根据单号查询快递信息
     * @param number 单号
     * @return 快递信息
     */
    Express findByNumber(String number);

    /**
     * 修改快递信息
     * @param id 要修改的快递的id
     * @param express 要修改的快递的信息
     * @return 受影响的行数
     */
    int update(Integer id,Express express);

    /**
     * 根据取件码删除快递
     * @param code 取件码
     * @return 受影响的行数
     */
    int deleteByCode(String code);

    /**
     * 根据手机号码查找快递
     * @param phone 手机号码
     * @return 快递集合
     */
    List<Express> findByPhone(String phone);

    /**
     * 根据取件码改变快递的状态
     *
     * @param code 取件码
     * @return 受影响的行数
     */
    int updateStatus(String code);

    /**
     * 根据取件码查询快递
     * @param code 取件码
     * @return  快递信息
     */
    Express findByCode(String code);

    /**
     * 总排名
     * @return 排名结果
     */
    List<RankingBean> rankExpressNumber();
    /**
     * 年排名
     * @return 排名结果
     */
    List<RankingBean> rankExpressNumberToYear();
    /**
     * 月排名
     * @return 排名结果
     */
    List<RankingBean> rankExpressNumberToMonth();
}
